package com.niit.scala

/**
 * Date:2025/3/14
 * Author：Ys
 * Description:
 */
object Base04 {
/*
  def main(args: Array[String]): Unit = {
    /*
       了解，能看懂就可以
     */
    //1.方法的调用
    //1.1 后缀调用法  对象名.方法名(参数)
    //求 -1 的绝对值
    var i = Math.abs(-1)
    println(i)

    //1.2中缀调用法 对象名 方法名 参数
     //在 Scala中的所有的操作符都是方法， + - * / %
    var v = 1 to 10
    var s = 1 + 1
    var abs = Math abs -1

    //1.3 花括号调用法 方法只有一个参数时候才能使用花括号调用法
    i = Math.abs{
      println("求绝对值")
      -1
    }

    //1.4无括号调用法 如果方法没有参数 可以省略方法后面的括号的
    sayHello


    /*
    2.函数 var/val 函数变量名 = (参数名:参数类型,参数名:参数类型)=> 函数体
       函数 是一个对象，类似于方法。函数也是有参数列表和返回值
       函数定义不需要使用def进行声明
       无需指定返回类型，编译器会自动推断函数返回值类型
     */
    // 定义两个整数的和 的函数
    var sum = (a:Int,b:Int) => a+b
    println(    sum(10,20)     )
    /*
       方法和函数的区别：
            方法属于类或者对象，在运行时候会加载JVM方法区
            函数是一个对象，在赋值的时候给到一个变量，在运行时候会加载JVM堆内存中
            函数是一个对象，继承 FunctionN，带有一些默认方法 apply curried toString
             在内存中对比： 函数 > 方法
     */
    //3.方法 转换为 函数   val/var 变量名= 方法名 _       使用 _就可以把方法转换为函数
    val a = add _
    println( a(1,2))
  }

  def add(a:Int,b:Int)={
    a+b
  }

  def sayHello(): Unit = {
    println("Hello")
  }
*/

  //面向对象    - 类 和 对象
  //1.创建一个Person   -- 不用写任何的方法和变量 直接创建一个空类
  class Person   //空 Person类

  //2.在类中去定义成员变量和方法，并实例化访问
  class Student{
    // 优雅的定义成员变量  _作为初始变量的值，起到了占位符的作用，用这个方法必须要声明变量类型
    private var name:String = _
    var age:Int = _

    def setName(name:String): Unit = {
      this.name = name
    }
    def getName():String = {
       this.name
    }

    def printInfo(): Unit = {
      //成员方法 this : 指的是当前这个类
      println(this.name,this.age)
    }
  }

  def main(args: Array[String]): Unit = {
    // 实例化对象   p为对象名
    val p = new Person()
    //如果类是空类，没有任何成员 ，可以省略 {}
    //如果构造器参数为空，在实例化对象的时候，可以省略()
    var pp = new Person

    var stu = new Student
    //stu.name = "张三"
    stu.setName("李四")
    stu.age = 20
    println(s"名字叫${stu.getName()},年龄为${stu.age}")
    stu.printInfo()

  }
}
